﻿using System.Data;
using System.Runtime.Intrinsics.X86;

namespace che8
{
    internal class Text5
    {
        static void Main(string[] args)
        {
            Console.WriteLine("显示转换");
//1. 括号强转
            //作用：一般情况下将高精度（大范围）类型强制转化为低精度（小范围）类型
            //语法：变量类型 变量名=（变量类型）变量

            //相同大类整型（注意范围）
            //有符号
            sbyte a = 1;
            short b = 1;
            int c = 55555;
            long d = 1;

            a=(sbyte)b;//上方语法
            a = (sbyte)c;
            a = (sbyte)d;
            b = (short)c;
            //b = (short)d;
            c = (int)d;
            //括号强转 可能会出现范围问题造成的异常
            Console.WriteLine(b);//结果显示-9981

            //无符号（同上）
            byte e = 1;
            ulong f = 1;
            e = (byte)f;

            //浮点之间（注意精度）
            float len = 0.6f;
            double rin = 0.6666666666666666666666666;
            len = (float)rin;
            Console.WriteLine(len);//因为精度原因，只保留了float的有效数字(有四舍五入)

            //无符号和有符号
            uint ab = 1;
            int ac = 1;
            ab = (uint)ac;
            Console.WriteLine(ab);
            uint ad = 1;
            int ae = -1;
            ad = (uint)ae;
            Console.WriteLine(ad);//在强转时一定要注意范围可能有异常
            ac = (int)ab;
            Console.WriteLine(ac);//相互转化也行

            //浮点和整型
            sbyte be = 1;
            float he = 0.6f;
            be = (sbyte)he;
            Console.WriteLine(be);//因为精度问题小数点后的数据会直接丢失（没有四舍五入）

//2.Parse法
            //作用：把字符串转换成对应类型
            //语法：变量类型.Parse("字符串")
            //注意：字符串必须转换成对应类型，否则报错

            //有符号
            int i1 = int.Parse("063");//不能填中文会报错
            //我们填写字符串必须是能转换成相应类型的字符，不符合规则就会报错
            Console.WriteLine(i1);
            short i2 = short.Parse("456");//精度范围也不能超
            Console.WriteLine(i2);
            Console.WriteLine(sbyte.Parse("66"));//合成写法
            Console.WriteLine(long.Parse("-9857463"));

            //无符号（同上）
            Console.WriteLine(byte.Parse("11"));
            Console.WriteLine(ushort.Parse("5643"));
            Console.WriteLine(uint.Parse("658743"));
            Console.WriteLine(ulong.Parse("687543"));

            //浮点数（同上）
            Console.WriteLine(float.Parse("1.325415"));//后面不加f
            Console.WriteLine(double.Parse("2.456678987"));
            Console.WriteLine(decimal.Parse("1.2222222"));

            //特殊类型
            bool i3 = bool.Parse("true");
            Console.WriteLine(i3);
            Console.WriteLine(char.Parse("B"));
            //Console.WriteLine(string.Parse("asdfg"));string不能用

//3.Convert法（什么都能转）
            //作用：更准确的将各个类型之间进行相互转换
            //语法： Convent.To目标类型（变量或常量）
            //注意：填写的变量或常量必须正确，否则出错

            //转字符串(如果把字符转换成对应类型 ，那字符串一定要合法合规)
            int b1 = Convert.ToInt32("213");//32是因为int有32位
            Console.WriteLine(b1);
            b1 = Convert.ToInt32(1.6666f);//精度更好些，四舍五入
            Console.WriteLine(b1);
            //bool也可以转换数值类型 true对应1，false对应0
            b1 = Convert.ToInt32(true);
            Console.WriteLine(b1);
            b1 = Convert.ToInt32(false);
            Console.WriteLine(b1);
            //char也行
            b1 = Convert.ToInt32('B');//转的ASCII码值
            Console.WriteLine(b1);
            //每一个类型都存在对应的Convert中的方法
            sbyte x1 = Convert.ToSByte("2");
            short x2 = Convert.ToInt16("23");
            long x3 = Convert.ToInt64("432");
            ulong x4 = Convert.ToUInt64("345");
            uint x5 = Convert.ToUInt32("12");
            bool x6 = Convert.ToBoolean("true");
            char x7 = Convert.ToChar("A");
            string x8 = Convert.ToString(437892);
            //就不一个一个打印了

            //4.其他类型转string
            //作用：拼接打印
            //语法： 变量.ToString();
            string str1 = 1.ToString();
            str1 = true.ToString();
            str1 = 'A'.ToString();
            str1 = 1.66f.ToString();
            Console.WriteLine(str1);
            //当我们进行字符拼接的时候就会自动调用string
            Console.WriteLine("123123" + 1 + true);


            //作业
            //1.显式类型转换有哪几种方式？分别是什么，请举例说明
            //括号强转，parse法，convert法
            int n1 = 1;
            sbyte n2 = 1;
            n1 = (sbyte)n2;
            Console.WriteLine(n1);

            Console.WriteLine(uint.Parse("543"));

            n1 = Convert.ToInt32(1.567f);//四舍五入
            Console.WriteLine(n1);
            string n3 = "fgds";
            n3 = Convert.ToString(1.4444m);
            Console.WriteLine(n3);

            //2.请将24069转换成字符并打印
            char n4 = (char)24069;
            Console.WriteLine(n4);

            //3.提示用户输入姓名，语文，英语，数学成绩并将输入的三门成绩用整型变量存储
            Console.WriteLine("请输入姓名：");
            Console.ReadLine();
            Console.WriteLine("请输入语文成绩：");
            Console.ReadLine();
            Console.WriteLine("请输入英语成绩：");
            Console.ReadLine();
            Console.WriteLine("请输入数学成绩：");
            Console.ReadLine();


        }
    }
}
